home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1993 / 5 / 04b / funktionsplotter / fplotter.ampk / EGS / TXT / EGS.def next >
Encoding:
Text File  |  1995-06-01  |  31.5 KB  |  812 lines

  1. |##########|
  2. |#MAGIC   #|BOPDMNIF
  3. |#PROJECT #|"ImportLibs"
  4. |#PATHS   #|"EGSProject"
  5. |#FLAGS   #|xx-x-x--x---xxx-----------------
  6. |#USERSW  #|--------------------------------
  7. |#USERMASK#|--------------------------------
  8. |#SWITCHES#|x--x-x----------
  9. |##########|
  10. DEFINITION MODULE EGS;
  11. |
  12. |
  13. |  +---------------------------------------------------------------------+
  14. |  |                                                                     |##
  15. |  |               egs.library v1.0, © '92 Viona Development             |##
  16. |  |                    EXTENDED - GRAPHICS - STANDARD                   |##
  17. |  |                                                                     |##
  18. |  +---------------------------------------------------------------------+##
  19. |    #######################################################################
  20. |
  21. | Diese Library bildet die grundlegende Schnittstelle zu hochauflösenden
  22. | Graphikkarten. Die Hardware wird durch dieses Modul fast völlig
  23. | abgeschirmt. Es ist nicht erlaubt direkt auf Hardware - Register zu zu-
  24. | greifen.
  25. |
  26. | Die Library garantiert volle Multitaskingunterstützung. Es können also
  27. | mehrere Programme gleichzeitig die Graphikkarte benützen. Zwischen den
  28. | einzelnen Screens kann Amiga-Like mit LAmiga+"S" durchgschalten werden.
  29. |
  30. | Ebenfalls wird ein eigener Mauszeiger unterstützt. Zwischen der normalen
  31. | Amiga-Maus, und der EGS-Maus kann über LAmiga+"A" gewechselt werden.
  32. | Befindet sich die Maus auf dem EGS-Screen, werden auch alle Tastencodes
  33. | umgeleitet.
  34. |
  35. | EGS-Screens verfügen über ein eigenes Nachrichtensystem, so daß bei
  36. | Anwendungen mit eigener Eingabenverwaltung auf ein Fenster verzichtet
  37. | werden kann, das Multitasking aber erhalten bleibt.
  38. |
  39. FROM Input  IMPORT QualifierSet;
  40. FROM Exec   IMPORT MsgPortPtr,Message,LibraryPtr,Node;
  41. FROM System IMPORT Regs,SysStringPtr,LONGSET;
  42. |
  43. | EMemNode, EMemPtr..
  44. |
  45. | Listenstruktur, in der die allozierten Speicherstücke gehalten werden.
  46. | Dabei sind für den Benutzer nur die Felder "dest" und "lock" freigegeben.
  47. | "dest" enthält die Adresse des allozierten Speicherstückes. Wird dieser
  48. | Zeiger benutzt, (z.B. in ein Adressregister geladen) muß das zugehörige
  49. | Speicherstück gelockt werden, damit es bei eventuellen Speicher-
  50. | reinigungen nicht verschoben wird. Dies geschieht dadurch, daß "lock"
  51. | erhöht wird.
  52. | "lock" muß, wenn das Speicherstück nicht mehr bearbeitet wird, wieder
  53. | vermindert werden.
  54. |
  55. | VAR mem : EMemNode;
  56. | ...
  57. | INC(mem.lock);          <- ab hier darf mem.dest benutzt werden
  58. | BytePtr(mem.dest)^:=$AA
  59. | ...
  60. | DEC(EMemNode.lock);     <- ab hier darf mem.dest nicht mehr benutzt
  61. |                            werden.
  62. |
  63. TYPE
  64.   EMemPtr   = POINTER TO EMemNode;
  65.   EMemNode  = RECORD
  66.                 dest   : ANYPTR;
  67.                 IF KEY : BOOLEAN
  68.                   OF FALSE THEN lock     : SHORTINT;
  69.                                 display  : BOOLEAN;
  70.                   OF TRUE  THEN moveable : CARDINAL;
  71.                 END;
  72.                 size   : LONGINT;
  73.                 next,
  74.                 prev   : EMemPtr;
  75.                 dest24,
  76.                 disp24 : LONGINT;
  77.               END;
  78. |
  79. | EViewPtr..
  80. |
  81. | Opaquer - Zugriff auf einen Darstellungsmodus. Enthält nur interne Daten,
  82. | die aus Kompatibilitätsgründen nicht exportiert werden.
  83. |
  84.   EViewPtr    = HIDDEN;
  85. |
  86. | CLUEntry, CLU, CLUPtr...
  87. |
  88. | Farbtabelle. Die Werte einer Farbkomponente gehen von 0 bis 255, nutzen
  89. | also die vollen 8 Bit aus.
  90. | Die Anzahl der nötigen Tabelleneinträge hängt von der gewählten Tiefe ab.
  91. |
  92. | Wird eine zu kurze Farbtabelle übergeben, werden die restlichen Farben
  93. | zufällig gewählt. Wird keine Farbtabelle angegeben, wird eine Standard-
  94. | tabelle angenommen.
  95. |
  96.   CLUEntry    = RECORD red,green,blue,dummy : SHORTCARD END;
  97.   CLU         = ARRAY OF CLUEntry;
  98.   CLUPtr      = POINTER TO CLU;
  99. |
  100. | EBitMapPtr, EBitMap...
  101. |
  102. | Grundlegende Struktur zur Verwaltung von Graphikspeicher.
  103. |
  104. |  .width        : Breite in Pixel
  105. |  .height       : Höhe in Pixel
  106. |  .bytesPerRow  : Anzahl der Bytes in einer Zeile
  107. |  .depth        : Anzahl der Bits für einen Bildpunkt,
  108. |                  im 24 Bit-Mode (Real) steht hier zwar 24, doch werden
  109. |                  immer 32 Bits (also ein Langwort) benutzt.
  110. |  .type         : Typ der BitPlane
  111. |
  112. |                    pixelMap        : Linearer Speicher, die Farbe eines
  113. |                                      Pixels wird durch aufeinanderfolgende
  114. |                                      Bits gegeben.
  115. |                                      Zugriff erfolgt über .planes.dest.
  116. |                    pixLaceMap      : Wie oben, nur befinden sich die
  117. |                                      ungeraden Zeilen eines Bildes in einem
  118. |                                      extra Speicherbereich, der zum
  119. |                                      eigentlichen die Entfernung .intDisp hat.
  120. |                    bitPlaneMap     : Der Speicher ist in einzelne BitPlanes
  121. |                                      zerlegt.
  122. |
  123. | Beispiel für Punktsetzoperationen in versch. Modi.
  124. |
  125. | PROCEDURE WritePixel(map IN A0 : EBitMapPtr;
  126. |                      c   IN D0 : LONGINT;
  127. |                      x   IN D1,
  128. |                      y   IN D2 : INTEGER);
  129. | TYPE
  130. |   BitPtr = POINTER TO SHORTSET;
  131. | CONST
  132. |   Masks2   = ARRAY OF SHORTSET:(SHORTSET:{6,7},SHORTSET:{4,5},
  133. |                                 SHORTSET:{2,3},SHORTSET:{0,1});
  134. |   Masks21  = ARRAY OF SHORTSET:(SHORTSET:{0..5},SHORTSET:{6,7,0..3},
  135. |                                 SHORTSET:{4..7,0,1},SHORTSET:{2..7});
  136. |   Color2   = ARRAY OF SHORTSET:(SHORTSET:{},SHORTSET:{0,2,4,6},
  137. |                                 SHORTSET:{1,3,5,7},SHORTSET:{0..7});
  138. | VAR
  139. |   dest IN A1 : LONGINT;
  140. | BEGIN
  141. |   INC(map^.planes.lock);
  142. |   dest:=map^.planes.dest+LMUL(map^.bytesPerRow,y);
  143. |
  144. |   IF KEY map^.depth
  145. |     OF 8  THEN BytePtr(dest+x)^:=c                     END
  146. |     OF 1  THEN INCL(BitPtr(dest+x DIV 8)^,7-(x MOD 8)) END
  147. |     OF 24 THEN LongPtr(dest+x*4+20)^:=c                END
  148. |     OF 2  THEN
  149. |             (* $W- *)
  150. |             WITH BitPtr AS p DO
  151. |               p:=BitPtr(dest+x DIV 4);
  152. |               x:=x MOD 4;
  153. |               p^:=p^*Masks21[x]+Color2[c]*Masks2[x]
  154. |             END
  155. |           END
  156. |     OF 4  THEN
  157. |             (* $W- *)
  158. |             WITH BitPtr AS p DO
  159. |               p:=BitPtr(dest+x DIV 2);
  160. |               IF ODD(x) THEN
  161. |                 p^:=p^*SHORTSET:{4..7}+CAST(SHORTSET,SHORTCARD(c MOD 16))
  162. |               ELSE
  163. |                 p^:=p^*SHORTSET:{0..3}+CAST(SHORTSET,SHORTCARD(c MOD 16)*16);
  164. |               END
  165. |             END
  166. |           END
  167. |   END;
  168. |   DEC(map^.planes.lock);
  169. | END WritePixel;
  170. |
  171.   EBitMapType= (pixelMap,pixLaceMap,bitPlaneMap,userMap,pixelMap_xRGB);
  172.   EBitMapPtr = POINTER TO EBitMap;
  173.   EBitMap    = RECORD
  174.                  width,
  175.                  height,
  176.                  bytesPerRow : INTEGER;
  177.                  depth       : SHORTINT;
  178.                  IF KEY type : EBitMapType
  179.                    OF pixelMap,
  180.                       pixLaceMap  THEN
  181.                                     planes    : EMemNode;
  182.                                     intDisp   : LONGINT;
  183.                    OF bitPlaneMap THEN
  184.                                     pad0      : LONGINT;
  185.                                     IF KEY : BOOLEAN
  186.                                       OF FALSE THEN lock     : SHORTINT;
  187.                                                     display  : BOOLEAN;
  188.                                       OF TRUE  THEN moveable : CARDINAL;
  189.                                     END;
  190.                                     pad1      : INTEGER;
  191.                                     bitPlanes : ARRAY [24] OF ANYPTR;
  192.                    OF userMap     THEN
  193.                                     actions   : ANYPTR;
  194.                  END
  195.                END;
  196.  
  197. (* PRIVATE *)
  198.   MouseExcept  = PROCEDURE(VAR x,y : INTEGER;data : ANYPTR):BOOLEAN;
  199. |
  200. | SoftMousePtr, SoftMouse, HardMousePtr, HardMouse...
  201. |
  202. | Datenblock für den Mauszeiger. Es können drei Farben verwendet werden.
  203. | Die beiden Bits eines Punktes stehen wie üblich direkt hintereinander,
  204. | die Kombination %00 steht für einen durchsichtugen Punkt.
  205. |
  206. | Die maximale Größe eines Software-Mauszeigers ist 32x32. Bei einem
  207. | Hardware Mauszeiger, könnten 64x64 verwendet werden, dies würde aber
  208. | den Prozessor bei einer Emulation total überlasten.
  209. |
  210. | EMouse, EMousePtr...
  211. |
  212. | Definitionsstruktur für einen Mauszeiger. Jede Screen kann zu jedem
  213. | Zeitpunkt immer nur einen Mauszeiger haben. Bei einem Screenwechsel,
  214. | wird der Mauszeiger entsprechend gewechselt. Der Mauszeiger einer
  215. | Screen kann jederzeit über einen Befehl gewechselt werden.
  216. |
  217. | Bei einer Graphikkarte ohne Hardware Maus, wird eine über Software
  218. | emuliert. Eine angegebene HardMouse-Struktur wird nur verwendet,
  219. | wenn auch eine Hardware Maus implementiert ist. Ist .soft = NIL,
  220. | wird automatisch die SoftMouse-Struktur in eine HardMouse-Struktur
  221. | umgewandelt (in Planung !!!)
  222. |
  223. |  .color1       : Farbe für %01
  224. |  .color2       : Farbe für %10
  225. |  .color3       : Farbe für %11.
  226. |                  Diese Farbwerte werden erst ab dem 4Bit Mode unterstützt
  227. |  .xSpot,
  228. |  .ySpot        : Displacement auf "Click"-Punkt der Maus
  229. |  .width,
  230. |  .height       : Breite und höhe der SoftMouse
  231. |  .soft         : Zeiger auf SoftMouse Struktur, sollte aus
  232. |                  kompatibilitätsgründen immer initialisiert sein
  233. |  .hard         : Zeiger auf HardMouse Struktur, soll immer
  234. |                  die kleine Maus verwendet werden, muß hier
  235. |                  NIL stehen.
  236. |
  237. | Beispiel : Der Standard-Mauszeiger
  238. |
  239. |   StdMouse= EMouse:(color1=$00000001,color2=$FF0000FF,color3=$80000080,
  240. |                     xSpot=1,ySpot=1,width=25,height=31,
  241. |                     soft=SoftMouse:(
  242. |  (%01010101000000000000000000000000,%00000000000000000000000000000000),
  243. |  (%01111111010101010000000000000000,%00000000000000000000000000000000),
  244. |  (%01111010111111110101010100000000,%00000000000000000000000000000000),
  245. |  (%01111111101010101111111101010101,%00000000000000000000000000000000),
  246. |  (%00011111111110101010101011110100,%00000000000000000000000000000000),
  247. |  (%00011111111111111110101011010000,%00000000000000000000000000000000),
  248. |  (%00011111111111111111111101000000,%00000000000000000000000000000000),
  249. |  (%00011111111111111111110100000000,%00000000000000000000000000000000),
  250. |  (%00010111111111111111101101000000,%00000000000000000000000000000000),
  251. |  (%00000111111111111111111011010100,%00000000000000000000000000000000),
  252. |  (%00000111111111111111111110111101,%00000000000000000000000000000000),
  253. |  (%00000111111111011111111111101111,%01000000000000000000000000000000),
  254. |  (%00000101111101010111111111111011,%11010100000000000000000000000000),
  255. |  (%00000001110101010101111111111110,%10111101000000000000000000000000),
  256. |  (%00000001010101010101111111111111,%11101011010000000000000000000000),
  257. |  (%00000001010101010101011111111111,%11111010110101000000000000000000),
  258. |  (%00000001010101010101010111111111,%11111111101111010000000000000000),
  259. |  (%00000001010101010101010101111111,%11111111111101000000000000000000),
  260. |  (%00000001010101010101010101111111,%11111111010100000000000000000000),
  261. |  (%00000000010101010001010101011111,%11111101000000000000000000000000),
  262. |  (%00000000010101000000010101010111,%11110101010000000000000000000000),
  263. |  (%00000000010100000000010101010101,%11110101010100000000000000000000),
  264. |  (%00000000010000000000000101010101,%11010101010101010000000000000000),
  265. |  (%00000000000000000000000001010101,%01010101010101010100000000000000),
  266. |  (%00000000000000000000000000010101,%01010101010101010000000000000000),
  267. |  (%00000000000000000000000000010101,%01010101010101000000000000000000),
  268. |  (%00000000000000000000000000000101,%01010101010000000000000000000000),
  269. |  (%00000000000000000000000000000001,%01010101000000000000000000000000),
  270. |  (%00000000000000000000000000000000,%01010101000000000000000000000000),
  271. |  (%00000000000000000000000000000000,%01010100000000000000000000000000),
  272. |  (%00000000000000000000000000000000,%00010000000000000000000000000000),
  273. |  (%00000000000000000000000000000000,%00000000000000000000000000000000))'PTR);
  274. |
  275.   HardMousePtr = POINTER TO HardMouse;
  276.   HardMouse    = ARRAY [0..63],[0..3] OF LONGINT;
  277.  
  278.   SoftMousePtr = POINTER TO SoftMouse;
  279.   SoftMouse    = ARRAY [0..31],[0..1] OF LONGINT;
  280.  
  281.   EMousePtr      = POINTER TO EMouse;
  282.   EMouse         = RECORD
  283.                      color1,
  284.                      color2,
  285.                      color3 : LONGINT;
  286.                      xSpot,
  287.                      ySpot  : INTEGER;
  288.                      width,
  289.                      height : INTEGER;
  290.                      soft   : SoftMousePtr;
  291.                      hard   : HardMousePtr;
  292.                    END;
  293. |
  294.   EScreenPtr     = POINTER TO EScreen;
  295. |
  296. | EDCMPFlags, EDCMPFlagSet, EGSMsgPtr, EGSMessage
  297. |
  298. | Strukturen für das Nachrichtensystem, die direkt auf Screen-Ebene arbeiten.
  299. | Somit können Maus- und Zeicheneingaben erhalten werden, ohne ein Window
  300. | verwenden zu müssen.
  301. |
  302. | EDCMPFlags:
  303. |   eMouseButtons  : Betätigen der Mausknöpfe
  304. |   eMouseMove     : Bewegen der Maus
  305. |   eRawKey        : Zeichencode von der Tastatur
  306. |   eTimeTick      : Meldungen vom Timer
  307. |
  308. |  .class          : Typ der Meldung
  309. |  .code           : Inhalt der Meldung (siehe "InputEvents..");
  310. |  .qualifier      :         "                    "
  311. |  .iAddress       : ???
  312. |  .mouseX,
  313. |  .mouseY         : Mausposition
  314. |  .second,
  315. |  .micros         : Event-Zeitpunkt
  316. |  .edcmpScreen    : Screen, von dem die Meldung kommt.
  317. |
  318.   EDCMPFlags     = (eMouseButtons,eMouseMove,eRawKey,eTimeTick,
  319.                     eDiskInserted,eDiskRemoved,eNewPrefs,
  320.                     ed7,ed8,ed9,ed10,ed11,ed12,ed13,ed14,ed15,ed16);
  321.   EDCMPFlagSet   = SET OF EDCMPFlags;
  322.   EGSMsgPtr      = POINTER TO EGSMessage;
  323.   EGSMessage     = RECORD OF Message
  324.                      class       : EDCMPFlagSet;
  325.                      code        : CARDINAL;
  326.                      qualifier   : QualifierSet;
  327.                      iAddress    : ANYPTR;
  328.                      mouseX,
  329.                      mouseY      : INTEGER;
  330.                      seconds,
  331.                      micros      : LONGCARD;
  332.                      edcmpScreen : EScreenPtr;
  333.                    END;
  334. |
  335. | EScrFlags, EScrFlagSet, EScreen, EScreenPtr, NewEScreen...
  336. |
  337. | EScreens sind Strukturen, die folgende Fähigkeiten vereinigen:
  338. |
  339. |  - Verwaltung des Auflösungsmodus (EViewPtr)
  340. |  - Verwaltung des Graphikspeichers (EBitMap)
  341. |  - Nachrichtensystem für Benutzereingaben
  342. |
  343. | EScrFlags
  344. |    screenBehind : Die neue Screen wird hinter allen anderen geöffnet
  345. |    ownBitMap    : Die Screen hat eine Benutzerdefinierte BitMap
  346. |    laceScreen   : der Screen soll trotz besseren Wissens als
  347. |                   InterlaceScreen geöffnet werden (um die Zeilenfrequenz
  348. |                   zu vermindern (noch bedeutungslos).
  349. |
  350. | NewEScreen
  351. |  .mode          : Name des gewünschten Bildschirmmodus, mit &0
  352. |                   am Ende (0C ...)
  353. |  .depth         : gewünschte Bittiefe (1,2,4,8 oder 24)
  354. |  .colors        : falls gewünscht eine eigene Farbtabelle, bei NIL wird
  355. |                   die Standardtabelle verwendet.
  356. |  .map           : Auf Wunsch eine eigene BitMap, die vorher alloziert
  357. |                   sein muß.
  358. |  .flags         : Flags für die neue Screen (nur "screenBehind")
  359. |  .mouse         : Auf Wunsch eine eigene Maus
  360. |  .edcmpFlags    : Nachrichtenkanäle
  361. |  .port          : Auf Wunsch ein eigener Nachrichtenport, dieser
  362. |                   muß wieder entfernt werden, bevor die Screen
  363. |                   geschlossen wird.
  364. |
  365.   EScrFlags      = (screenBehind,ownBitMap,laceScreen,
  366.                     sf3,sf4,sf5,sf6,sf7,sf8,sf9,sf10,sf11,
  367.                     sf12,sf13,sf14,sf15,sf16);
  368.   EScrFlagSet    = SET OF EScrFlags;
  369.   NewEScreen     = RECORD
  370.                      mode       : SysStringPtr;
  371.                      depth      : CARDINAL;
  372.                      colors     : CLUPtr;
  373.                      map        : EBitMapPtr;
  374.                      flags      : EScrFlagSet;
  375.                      mouse      : EMousePtr;
  376.                      edcmpFlags : EDCMPFlagSet;
  377.                      port       : MsgPortPtr;
  378.                    END;
  379. |
  380. | EScreen
  381. |  .prev,
  382. |  .next          : interne Verkettung
  383. |  .view          : !!!! PRIVAT !!!!
  384. |  .map           : Zeiger auf die BitMap-Struktur des Screens
  385. |  .colors        : !!!! PRIVAT !!!!
  386. |  .mouse         : EMouse-Struktur (READ ONLY !!!!)
  387. |  .mouseOn       : !!!! PRIVAT !!!!
  388. |  .edcmpFlags    : Nachrichtenkanäle (READ ONLY !!!)
  389. |  .port          : Nachrichtenport der Screen
  390. |  .backLink      : Verkettungsfeld für Benutzer, wird z.B. von EGSIntui
  391. |                   verwendet.
  392. |
  393.   EScreen        = RECORD
  394.                      prev,
  395.                      next       : EScreenPtr;
  396.                      view       : EViewPtr;
  397.                      map        : EBitMapPtr;
  398.                      colors     : CLUPtr;
  399.                      mouse      : EMousePtr;
  400.                      flags      : EScrFlagSet;
  401.                      mouseOn    : SHORTCARD;
  402.                      edcmpFlags : EDCMPFlagSet;
  403.                      port       : MsgPortPtr;
  404.                      backLink   : ANYPTR;
  405.                      mouseX,
  406.                      mouseY     : INTEGER;
  407.                      iScreen    : ANYPTR;
  408.                    END;
  409. |
  410. | G300Contorl, G300ControlSet, MonitorPref,
  411. | HelpModePtr, HelpMode, ScreenMode, ScreenModePtr
  412. |
  413. | PRIVAT, dienen dazu während des Betriebs neue Screenmodes zu erezeugen,
  414. |         oder zu ändern.
  415. |
  416.   G300Control = (enableVTG,interlaced,slaveMode,plainSync,
  417.                  separateSync,videoOnly,res0,byteMode,
  418.                  mode2,delay0,delay1,delay2,
  419.                  blackLevel,res1,noVideoRam,blankTest,
  420.                  cBlankOut,bitsPix0,bitsPix1,addrStep0,
  421.                  addrStep1,ccirLace,res2,undelayClk);
  422.   G300ControlSet = SET OF G300Control;
  423.  
  424.   MonitorPref = RECORD
  425.                   MaxLineFreq     : CARDINAL; | 1/10KHz
  426.                   MaxPixFreq      : CARDINAL; | 1/100MHz
  427.                   HSync,                      | 10ns
  428.                   HBack,                      | 10ns
  429.                   HFront          : CARDINAL; | 10ns
  430.                   VSync,                      | 100ns
  431.                   VBack,                      | 100ns
  432.                   VFront          : CARDINAL; | 100ns
  433.                   control         : G300ControlSet;
  434.                 END;
  435.  
  436.   HelpModePtr   = POINTER TO HelpMode;
  437.   HelpMode      = RECORD
  438.                     lace     : BOOLEAN;
  439.                     extSync  : BOOLEAN;
  440.                     PixFreq  : CARDINAL; | 1/100MHz
  441.                     HSync,
  442.                     HBack,
  443.                     HFront   : CARDINAL; | in Pixel
  444.                     VSync,
  445.                     VBlank,
  446.                     dummy1,
  447.                     dummy2   : CARDINAL; | in Lines
  448.                   END;
  449.  
  450.   ScreenModePtr = POINTER TO ScreenMode;
  451.   ScreenMode    = RECORD OF Node
  452.                     horiz,
  453.                     vert      : CARDINAL;
  454.                     depths    : LONGSET;
  455.                     IF KEY type : (generic,standard,monitor)
  456.                       OF generic  THEN lace    : BOOLEAN;
  457.                       OF standard THEN pseudo,
  458.                                        real    : HelpMode
  459.                     END;
  460.                   END;
  461.  
  462. VAR
  463.   EGSBase : LibraryPtr;
  464. |
  465. | OpenScreen(VAR scr IN A0 : NewEScreen):EScreenPtr;
  466. |
  467. | Öffnet einen EGS-Screen, anhand der Daten der NewEScreen-Struktur.
  468. | Kann der Screen nicht geöffnet werden (Speicher, Monitor oder Modus),
  469. | wird NIL zurückgegeben.
  470. |
  471. | Beispiel:
  472. |
  473. | VAR scr : EGS.EScreenPtr;
  474. |
  475. | BEGIN
  476. |   scr:=NIL;
  477. |   scr:=OpenScreen(NewEScreen:(mode="800x600".data'PTR,depth=2));
  478. |   IF scr#NIL THEN
  479. |     ...
  480. |   ELSE
  481. |     HALT(4711)
  482. |   END;
  483. | CLOSE
  484. |   IF scr#NIL THEN CloseScreen(scr);scr:=NIL END;
  485. | END ...
  486. |
  487. LIBRARY EGSBase BY -30 PROCEDURE OpenScreen(VAR scr IN A0 : NewEScreen):EScreenPtr;
  488. |
  489. | CloseScreen(scr IN A0 : EScreenPtr);
  490. |
  491. | Schließt einen EGS-Screen. War dies er letzte Screen, wird die Maus
  492. | automatisch wieder auf den Amiga-Bildschirm geschaltet.
  493. |
  494. LIBRARY EGSBase BY -36 PROCEDURE CloseScreen(scr IN A0 : EScreenPtr);
  495. |
  496. | MouseOn(scr IN A0 : EScreenPtr);
  497. | MouseOff(scr IN A0 : EScreenPtr);
  498. |
  499. | Bei Verwendung einer Software-Maus, muß diese während Graphikoperationen
  500. | auf die Bitmap der Screen abgeschaltet werden. Dieses Ab- und Anschalten
  501. | der Maus wird bei einer Hardware-Maus ignoriert. Soll die Maus sicher
  502. | weggschaltet werden, muß "ActivateAmigaScreen" verwendet werden.
  503. |
  504. | Wird die Maus mehrere Sekunden nicht bewegt, und wird MouseOff() aufgerufen,
  505. | wird sie beim korrespondierenden MouseOn() nicht wieder angeschaltet. Sie
  506. | erscheint erst wieder, wenn sie bewegt wird.
  507. |
  508. | MouseOff() und MouseOn() sind schachtelbar, es können also gefahrlos
  509. | mehrere Schachtelungen auftreten (um bei einer komplexen Zeichnung
  510. | nicht für jedes Element die Maus ab- und anschalten zu müssen).
  511. |
  512. | Jedes MouseOff() muß durch ein korrespondierendes MouseOn() wieder
  513. | deaktiviert werden.
  514. |
  515. | Beispiel:
  516. |
  517. |  ...
  518. |    FOR i:=0 TO 599 DO
  519. |      MouseOff(scr);
  520. |      WritePixel(scr^.map,3,i,i);
  521. |      MouseOn(scr);
  522. |    END;
  523. |  ...
  524. |
  525. | oder besser:
  526. |
  527. |  ...
  528. |    MouseOff(scr);
  529. |    FOR i:=0 TO 599 DO
  530. |      WritePixel(scr^.map,3,i,i);
  531. |    END;
  532. |    MouseOn(scr);
  533. |  ...
  534. |
  535. LIBRARY EGSBase BY -42 PROCEDURE MouseOn(scr IN A0 : EScreenPtr);
  536. LIBRARY EGSBase BY -48 PROCEDURE MouseOff(scr IN A0 : EScreenPtr);
  537. |
  538. | ModifyMouse(scr IN A0 : EScreenPtr;mouse IN A1 : EMousePtr);
  539. |
  540. | Ändert den Mauszeiger der Angegebenen Screen. Dies ist der einzig
  541. | erlaubte Weg, ein einfaches Ändern des .mouse-Eintrags in der Screen,
  542. | ist Illegal und absolut verboten !!!
  543. |
  544. LIBRARY EGSBase BY -54 PROCEDURE ModifyMouse(scr IN A0 : EScreenPtr;mouse IN A1 : EMousePtr);
  545. |
  546. | ScreenToFront(scr IN A0 : EScreenPtr);
  547. |
  548. | Schaltet den angegebenen Screen in den Vordergrund.
  549. |
  550. LIBRARY EGSBase BY -60 PROCEDURE ScreenToFront(scr IN A0 : EScreenPtr);
  551. |
  552. | ScreenToBack(scr IN A0 : EScreenPtr);
  553. |
  554. | Schaltet den angegebenen Screen in den Hintergrund.
  555. |
  556. LIBRARY EGSBase BY -66 PROCEDURE ScreenToBack(scr IN A0 : EScreenPtr);
  557. |
  558. | ActivateEGSScreen;
  559. |
  560. | Aktiviert den EGS-Screen, (bewegt die Maus auf die EGS-Screen), hat
  561. | keine Wirkung, wenn die EGS-Screen bereits aktiv ist.
  562. |
  563. LIBRARY EGSBase BY -72 PROCEDURE ActivateEGSScreen;
  564. |
  565. | ActivateAmigaScreen;
  566. |
  567. | Reaktiviert den AmigaScreen, hat keine Wirkung, wenn der Amiga-Screen
  568. | bereits aktiv ist.
  569. |
  570. LIBRARY EGSBase BY -78 PROCEDURE ActivateAmigaScreen;
  571. |
  572. | ModifyEDCMP(scr IN A0 : EScreenPtr;flags IN D0 : EDCMPFlagSet);
  573. |
  574. | Ändert den Zustand des Datenkanals. Ist kein Flag gesetzt, wird der Port
  575. | geschlossen. Ist ein eigener Port eingehängt sollte dieser vorher
  576. | entfernt werden.
  577. |
  578. LIBRARY EGSBase BY -90 PROCEDURE ModifyEDCMP(scr   IN A0 : EScreenPtr;
  579.                                              flags IN D0 : EDCMPFlagSet);
  580. |
  581. | AllocEMem(VAR mem  IN A1 : EMemNode;
  582. |               Size IN D1 : LONGINT):BOOLEAN;
  583. |
  584. | Alloziert Speicher auf der Graphikkarte, falls eine BitMap-Struktur
  585. | auf eigene Faust erstellt werden soll. Dazu muß eine EMenNode-Struktur
  586. | übergeben werden. Sie darf nicht auf dem Stack liegen, oder durch
  587. | das Programm überschrieben werden, solange der Speicher belegt ist.
  588. | Kann genügend Speicher alloziert werden, wird "TRUE" zurückgegeben.
  589. |
  590. | Die EGS-Speicherverwaltung sieht Graphik-Speicher als wichtige
  591. | Resource an. Deshalb werden Speicherstücke bei Bedarf im Graphikberreich
  592. | verschoben, um größere Speicherstücke zu gewinnen. Um zu verhindern, daß
  593. | einem während der Arbeit der Speicher unter den Füßen weggeschoben wird,
  594. | muß der Speicher vor dem Zugriff gelockt werden. Siehe dazu die
  595. | Strukturbeschreibung.
  596. |
  597. | Mit AllocEMem allozierter Speicher, muß mit "DisposeEMem" wieder frei-
  598. | gegeben werden.
  599. |
  600. LIBRARY EGSBase BY -96 PROCEDURE AllocEMem(VAR mem  IN A1 : EMemNode;
  601.                                                Size IN D1 : LONGINT):BOOLEAN;
  602. |
  603. | DisposeEMem(VAR mem IN A1 : EMemNode);
  604. |
  605. | Gibt mit "AllocEMem" allozierten Speicher wieder zurück. Es muß keine
  606. | Länge mit angegeben werden, da diese in der EMemNode enthalten ist.
  607. |
  608. LIBRARY EGSBase BY-102 PROCEDURE DisposeEMem(VAR mem IN A1 : EMemNode);
  609. |
  610. | PRIVAT, unter Androhung der Todesstrafe für Freaks verboten !!!!
  611. |
  612. LIBRARY EGSBase BY-108 PROCEDURE AddScreenMode(VAR Mode IN A0 : ScreenMode);
  613. LIBRARY EGSBase BY-114 PROCEDURE DelScreenMode(Mode IN A0 : SysStringPtr);
  614. LIBRARY EGSBase BY-120 PROCEDURE SetMonitor(VAR Minitor IN A0 : MonitorPref);
  615. |
  616. | AllocBitMap(width  IN D0,
  617. |             height IN D1,
  618. |             depth  IN D2 : CARDINAL;
  619. |             type   IN A0 : SysStringPtr):EBitMapPtr;
  620. |
  621. |
  622. | type:
  623. |   NIL        : BitMap Strktur wie Visiona
  624. |   "VISIONA:" : Speicher auf der Visiona Karte
  625. |
  626. |
  627. | Der empfohlene Weg, eine EBitMap zu initialisieren. Diese Struktur
  628. | bildet das Rückrat aller Graphikoperationen. Die Parameter "width",
  629. | "height" und "depth" bestimmen die Größe des Speicherbereiches.
  630. |
  631. | Soll die BitMap angezeigt werden können, muß Graphikspeicher verwendet
  632. | werden. Dazu muß bei "vmem" TRUE angegeben werden. Wird "FALSE" angegeben,
  633. | wird erst versucht FastMem zu allozieren, da dies schneller, und vor allem
  634. | billiger ist.
  635. |
  636. | Die BitMap wird nicht gelöscht !!!
  637. |
  638. LIBRARY EGSBase BY-126 PROCEDURE OldAllocBitMap(width  IN D0,
  639.                                                 height IN D1,
  640.                                                 depth  IN D2 : CARDINAL;
  641.                                                 type   IN A0 : SysStringPtr):EBitMapPtr;
  642.  
  643. TYPE
  644.   EBitMapFlags   = (displayable,blitable,swapable,notswapable,clearmap,ebf31=31);
  645.   EBitMapFlagSet = SET OF EBitMapFlags;
  646.  
  647. LIBRARY EGSBase BY-198 PROCEDURE AllocBitMap(width  IN D0,
  648.                                              height IN D1,
  649.                                              depth  IN D2  : CARDINAL;
  650.                                              type   IN D3  : EBitMapType;
  651.                                              flags  IN D4  : EBitMapFlagSet;
  652.                                              friend IN A0  : EBitMapPtr):EBitMapPtr;
  653. |
  654. | DisposeBitMap(Map IN A0 : EBitMapPtr);
  655. |
  656. | Gibt den Speicher einer EBitMap wieder frei. Dies sollte am Ende des Programms
  657. | auf jeden Fall erfolgen.
  658. |
  659. |  " I. Amiga law : Remeber, you are not alone in here "
  660. |
  661. LIBRARY EGSBase BY-132 PROCEDURE DisposeBitMap(Map IN A0 : EBitMapPtr);
  662. |
  663. | ClearBitMap(Map IN A0 : EBitMapPtr);
  664. |
  665. | Löscht den Speicher einer angegebenen BitMap mit dem Farbwert 0.
  666. |
  667. LIBRARY EGSBase BY-138 PROCEDURE ClearBitMap(Map IN A0 : EBitMapPtr);
  668. |
  669. | PRIVAT !!!
  670. |
  671. LIBRARY EGSBase BY-144 PROCEDURE SetMouseExcept(callMe IN A0 : MouseExcept;
  672.                                                 data   IN A1 : ANYPTR);
  673. LIBRARY EGSBase BY-150 PROCEDURE ResetMouseExcept;
  674. |
  675. | SetRGB8(scr   IN A0 : EScreenPtr;
  676. |         reg   IN D0,
  677. |         red   IN D1,
  678. |         green IN D2,
  679. |         blue  IN D3 : CARDINAL);
  680. |
  681. | Setzt eine Farbe für ein Farbregister der CLUT. Die Werte für die einzelnen
  682. | Farbkomponenten müssen im Bereich 0 bis 255 liegen. Es können je nach
  683. | Bittiefe bis zu 256 Register benutzt werden. Im 24-Bit Modus dient die
  684. | CLUT zur Gamma-Correction.
  685. |
  686. LIBRARY EGSBase BY -84 PROCEDURE SetRGB8(scr   IN A0 : EScreenPtr;
  687.                                          reg   IN D0,
  688.                                          red   IN D1,
  689.                                          green IN D2,
  690.                                          blue  IN D3 : CARDINAL);
  691. |
  692. | GetRGB8(scr IN A0 : EScreenPtr;reg IN D0 : INTEGER):LONGINT;
  693. |
  694. | Das Ergebniss kann in ein CLUEntry gecastet werden, hat also das Format:
  695. |
  696. | RRRR RRRR GGGG GGGG BBBB BBBB .... ....
  697. |
  698. LIBRARY EGSBase BY-156 PROCEDURE GetRGB8(scr IN A0 : EScreenPtr;
  699.                                          reg IN D0 : INTEGER):LONGINT;
  700. |
  701. | PROCEDURE SetRGB8CM(scr    IN A0 : EScreenPtr;
  702. |                     colors IN A1 : CLUPtr;
  703. |                     start  IN D0,
  704. |                     num    IN D1 : INTEGER);
  705. |
  706. | Setzt eine angegebene Anzahl aufeinanderfolgender Farbregister neu. Die Summe
  707. | aus 'start' und 'num' darf dabei die Anzahl der vorhandenen Farbregister
  708. | nicht überschreiten.
  709. |
  710. LIBRARY EGSBase BY-174 PROCEDURE SetRGB8CM(scr    IN A0 : EScreenPtr;
  711.                                            colors IN A1 : CLUPtr;
  712.                                            start  IN D0,
  713.                                            num    IN D1 : INTEGER);
  714. |
  715. | PROCEDURE GetRGB8CM(scr    IN A0 : EScreenPtr;
  716. |                     colors IN A1 : CLUPtr;
  717. |                     start  IN D0,
  718. |                     num    IN D1 : INTEGER);
  719. |
  720. | Kopiert einen Ausschnitt aus der Farbtabelle einer Screen in eine eigene.
  721. |
  722. LIBRARY EGSBase BY-186 PROCEDURE GetRGB8CM(scr    IN A0 : EScreenPtr;
  723.                                            colors IN A1 : CLUPtr;
  724.                                            start  IN D0,
  725.                                            num    IN D1 : INTEGER);
  726. |
  727. | PRIVAT !!!
  728. |
  729. LIBRARY EGSBase BY-162 PROCEDURE RecalcScreen(scr IN A0 : EScreenPtr);
  730. |
  731. | PROCEDURE FlipMap(scr IN A0 : EScreenPtr;
  732. |                   map IN A1 : EBitMapPtr):EBitMapPtr;
  733. |
  734. | Häufig (besonders bei Animationen) ist es nötig zwischen zwei Bildschirm-
  735. | speicherbereichen hin und her zu schalten, ohne daß dabei der Darstellungs-
  736. | modus geändert, und das Sync-Timing kurz unterbrochen wird.
  737. |
  738. | Mit 'FlipMap' kann einem Screen eine andere 'BitMap' zugeordnet werden. Diese
  739. | BitMap wird dann vom nächsten Frame ab anstatt der bisherigen gezeigt (wenn
  740. | die Screen die vorderste war). Es entstehen dabei keine unnötigen Flakker-
  741. | effekte.
  742. |
  743. | Die Prozedur liefert einen Zeiger auf die alte BitMap zurück. Besonders
  744. | empfehlenswert ist in diesem Zusammenhang die Screen mit einer eigenen BitMap
  745. | zu öffnen.
  746. |
  747. LIBRARY EGSBase BY-168 PROCEDURE FlipMap(scr IN A0 : EScreenPtr;
  748.                                          map IN A1 : EBitMapPtr):EBitMapPtr;
  749. |
  750. | Um eine möglichst hohe kompatibilität zwischen einzelnen Karten zu ermöglichen
  751. | muß die Library eine Funktion zur Verfügung stellen, mit der Informationen
  752. | zur aktuellen Karte erhalten werden könne, unter anderem auch die möglichen
  753. | Auflösungen.
  754. |
  755. | Diese Aufgabe erfüllt die HardInfo-Struktur und die Prozedur 'GetHardInfo'
  756. |
  757. TYPE
  758.   HardInfoFlags    = (hardBlitter,hardBootrom,hardVBlank,hardRealMode,
  759.                       hardGammaCorrect,hardPlanes,clockStable,
  760.                       hardBigMouse64,hardSmallMouse16,
  761.                       dither64,h10,h11,h12,h13,h14,h15,h16);
  762.   HardInfoFlagSet  = SET OF HardInfoFlags;
  763.  
  764.   HardInfoPtr      = POINTER TO HardInfo;
  765.   HardInfo         = RECORD
  766.                       product,
  767.                       manufact,
  768.                       name      : SysStringPtr;
  769.                       version,
  770.                       maxFreq   : INTEGER;
  771.                       flags     : HardInfoFlagSet;
  772.                       modes     : Exec.ListPtr;
  773.                       actPixClock : INTEGER; | in 100tel MHz
  774.                       frameTime   : INTEGER; | in ms
  775.                       memBase     : ANYPTR;
  776.                       memSize     : LONGINT;
  777.                       libDate     : SysStringPtr;
  778.                       frame       : LONGINT;
  779.                     END;
  780. |
  781. LIBRARY EGSBase BY-180 PROCEDURE GetHardInfo():HardInfoPtr;
  782. |
  783. LIBRARY EGSBase BY-192 PROCEDURE WaitTOF;
  784.  
  785. | last is -198 AllocBitMap
  786.  
  787. GROUP
  788.   MemoryGrp = EMemNode,AllocEMem,DisposeEMem;
  789.   BitMapGrp = EBitMap,EBitMapPtr,
  790.               AllocBitMap,DisposeBitMap,ClearBitMap;
  791.   ColorGrp  = CLU,CLUEntry,CLUPtr,
  792.               SetRGB8,GetRGB8,SetRGB8CM,GetRGB8CM;
  793.   MouseGrp  = SoftMouse,SoftMousePtr,EMousePtr,EMouse,
  794.               MouseOn,MouseOff,ModifyMouse;
  795.   ScreenGrp = EScreenPtr,NewEScreen,EScrFlags,EScrFlagSet,
  796.               EDCMPFlags,EDCMPFlagSet,
  797.               MouseOn,MouseOff,
  798.               OpenScreen,CloseScreen,ScreenToFront,ScreenToBack;
  799.   MessageGrp= EDCMPFlags,EDCMPFlagSet,
  800.               EGSMsgPtr,QualifierSet,
  801.               Exec.GetMsg,Exec.WaitPort,Exec.ReplyMsg,
  802.               ModifyEDCMP;
  803. |
  804. | PRIVAT !!!!
  805. |
  806.   ViewGrp   = EViewPtr,G300Control,G300ControlSet,
  807.               MonitorPref,HelpMode,ScreenMode,
  808.               AddScreenMode,DelScreenMode,
  809.               SetMonitor;
  810.  
  811. END EGS.
  812.